<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">




<title>DotNet Framework源代码中的模式（九）——Flyweight（享元模式） - Guushuuse .NET - 博客园</title>
<meta name="keywords" content="Pattern">



<link title="RSS" type="application/rss+xml" rel="alternate" href="http://www.cnblogs.com/guushuuse/rss">
<link title="RSD" type="application/rsd+xml" rel="EditURI" href="http://www.cnblogs.com/guushuuse/rsd.xml"> 
  



<link rel="stylesheet" type="text/css" href="index.css" media="all">
</head>
<body>
    <form name="Form1" method="post" action="http://www.cnblogs.com/guushuuse/archive/2009/05/24/1488422.html" id="Form1">
<div>
<input name="__VIEWSTATE" id="__VIEWSTATE" value="" type="hidden">
</div>

        
<h1><a id="Header1_HeaderTitle" class="headermaintitle" href="http://www.cnblogs.com/guushuuse/">Guushuuse .NET</a></h1>
<p id="tagline">一直专注于企业应用开发。
5~9——原创随笔
</p>
<div id="rigthtag">&nbsp;</div>
			<div id="main">
				
					
	<div class="post">
		<h2>
			<a id="ctl04_TitleUrl" href="http://www.cnblogs.com/guushuuse/archive/2009/05/24/1488422.html">DotNet Framework源代码中的模式（九）——Flyweight（享元模式）</a>
		</h2>
		&nbsp;
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">运用共享技术有效地支持大量细粒度的对象。</span></p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;"><img alt="" src="2009052401.jpg" border="0" height="289" width="467"></span></p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">&nbsp; </span></p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">在</span>.Net<span style="font-family: 宋体;">中处理字符串时，有一个很重要的机制，叫做字符串驻留机制，就是运用了享元模式。</span>CLR<span style="font-family: 宋体;">（公共语言运行库）通过维护一个表来存放字符串，该表称为拘留池，它包含程序中以编程方式声明或创建的每个唯一的字符串的一个引用。因此，具有特定值的字符串的实例在系统中只有一个。</span></p>
<p style="text-indent: 21pt;">CLR<span style="font-family: 宋体;">中使用享元模式实现字符串驻留的过程：</span>CLR<span style="font-family: 宋体;">内部维护着一块特殊的数据结构——我们可以把它看成是一个</span>Hash table<span style="font-family: 宋体;">，这个</span>Hash table<span style="font-family: 宋体;">维护者大部分创建的</span>string<span style="font-family: 宋体;">（我这里没有说全部，因为有特例）。这个</span>Hash table<span style="font-family: 宋体;">的</span>Key<span style="font-family: 宋体;">对应的相应的</span>string<span style="font-family: 宋体;">本身，而</span>Value<span style="font-family: 宋体;">则是分配给这个</span>string<span style="font-family: 宋体;">的内存块的引用。当</span>CLR<span style="font-family: 宋体;">初始化的时候创建这个</span>Hash table<span style="font-family: 宋体;">。一般地，在程序运行过程中，如果需要的创建一个</span>string<span style="font-family: 宋体;">，</span>CLR<span style="font-family: 宋体;">会根据这个</span>string<span style="font-family: 宋体;">的</span>Hash Code<span style="font-family: 宋体;">试着在</span>Hash table<span style="font-family: 宋体;">中找这个相同的</span>string<span style="font-family: 宋体;">，如果找到，则直接把找到的</span>string<span style="font-family: 宋体;">的地址赋给相应的变量，如果没有则在托管堆中创建一个</span>string<span style="font-family: 宋体;">，</span>CLR <span style="font-family: 宋体;">会先在</span>managed heap<span style="font-family: 宋体;">中创建该</span>strng<span style="font-family: 宋体;">，并在</span>Hash table<span style="font-family: 宋体;">中创建一个</span>Key-Value Pair<span style="font-family: 宋体;">——</span>Key<span style="font-family: 宋体;">为这个</span>string<span style="font-family: 宋体;">本身，</span>Value<span style="font-family: 宋体;">位这个新创建的</span>string<span style="font-family: 宋体;">的内存地址，这个地址最重被赋给响应的变量。</span></p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">通过</span>Strig<span style="font-family: 宋体;">类和拘留池相关的方法</span>Intern(<span style="color: rgb(43, 145, 175);">String str)</span><span style="font-family: 宋体;">、</span>IsInterned(<span style="color: rgb(43, 145, 175);">String str)</span><span style="font-family: 宋体;">的底层实现可以更加直观的了解以上过程。</span>&nbsp;</p>
<p style="text-indent: 21pt;">System.String<span style="font-family: 宋体;">类</span><span style="font-family: 宋体;"></span></p>
<div class="cnblogs_code"><img style="display: none;" id="Code_Closed_Image_210151" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_210151').style.display='none'; document.getElementById('Code_Open_Image_210151').style.display='inline'; document.getElementById('Code_Open_Text_210151').style.display='inline';" src="contractedblock.gif" align="top" height="16" width="11"><img id="Code_Open_Image_210151" style="display: inline;" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_210151').style.display='none'; getElementById('Code_Closed_Image_210151').style.display='inline'; getElementById('Code_Closed_Text_210151').style.display='inline';" src="expandedblockstart.gif" align="top" height="16" width="11"><span style="display: none;" class="cnblogs_code_Collapse" id="Code_Closed_Text_210151">Code</span><span id="Code_Open_Text_210151" style="display: inline;"><br>
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;String&nbsp;Intern(String&nbsp;str)<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(str&nbsp;</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">throw</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;ArgumentNullException(</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">str</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;Thread.GetDomain().GetOrInternString(str);<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;String&nbsp;IsInterned(String&nbsp;str)<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(str&nbsp;</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">throw</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;ArgumentNullException(</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">str</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;Thread.GetDomain().IsStringInterned(str);<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
</span></span></div>
<p>&nbsp; </p>
<p style="text-indent: 21pt;">System.AppDomain<span style="font-family: 宋体;">类</span><span style="font-family: 宋体;"></span></p>
<div class="cnblogs_code"><img style="display: none;" id="Code_Closed_Image_210237" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_210237').style.display='none'; document.getElementById('Code_Open_Image_210237').style.display='inline'; document.getElementById('Code_Open_Text_210237').style.display='inline';" src="contractedblock.gif" align="top" height="16" width="11"><img id="Code_Open_Image_210237" style="display: inline;" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_210237').style.display='none'; getElementById('Code_Closed_Image_210237').style.display='inline'; getElementById('Code_Closed_Text_210237').style.display='inline';" src="expandedblockstart.gif" align="top" height="16" width="11"><span style="display: none;" class="cnblogs_code_Collapse" id="Code_Closed_Text_210237">Code</span><span id="Code_Open_Text_210237" style="display: inline;"><br>
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: rgb(0, 0, 0);">[MethodImplAttribute(MethodImplOptions.InternalCall)]<br>
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">internal</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">extern</span><span style="color: rgb(0, 0, 0);">&nbsp;String&nbsp;IsStringInterned(String&nbsp;str);<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;[MethodImplAttribute(MethodImplOptions.InternalCall)]<br>
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">internal</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">extern</span><span style="color: rgb(0, 0, 0);">&nbsp;String&nbsp;GetOrInternString(String&nbsp;str);<br>
</span></span></div>
<p>&nbsp;</p>
<p style="text-indent: 21pt;">sscli20\clr\src\vm\appdomain.cpp</p>
<div class="cnblogs_code"><img style="display: none;" id="Code_Closed_Image_210347" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_210347').style.display='none'; document.getElementById('Code_Open_Image_210347').style.display='inline'; document.getElementById('Code_Open_Text_210347').style.display='inline';" src="contractedblock.gif" align="top" height="16" width="11"><img id="Code_Open_Image_210347" style="display: inline;" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_210347').style.display='none'; getElementById('Code_Closed_Image_210347').style.display='inline'; getElementById('Code_Closed_Text_210347').style.display='inline';" src="expandedblockstart.gif" align="top" height="16" width="11"><span style="display: none;" class="cnblogs_code_Collapse" id="Code_Closed_Text_210347">Code</span><span id="Code_Open_Text_210347" style="display: inline;"><br>
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: rgb(0, 0, 0);">STRINGREF&nbsp;</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">BaseDomain::IsStringInterned(STRINGREF&nbsp;</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">pString)<br>
{<br>
&nbsp;&nbsp;&nbsp;&nbsp;CONTRACTL<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GC_TRIGGERS;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;THROWS;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MODE_COOPERATIVE;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PRECONDITION(CheckPointer(pString));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INJECT_FAULT(COMPlusThrowOM(););<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;CONTRACTL_END;<br>
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(m_pStringLiteralMap&nbsp;</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">&nbsp;NULL)<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LazyInitStringLiteralMap();<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;_ASSERTE(m_pStringLiteralMap);<br>
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;m_pStringLiteralMap</span><span style="color: rgb(0, 0, 0);">-&gt;</span><span style="color: rgb(0, 0, 0);">GetInternedString(pString,&nbsp;FALSE,&nbsp;</span><span style="color: rgb(0, 0, 0);">!</span><span style="color: rgb(0, 0, 0);">CanUnload()&nbsp;</span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);">&nbsp;bAppDOmainWontUnload&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);">);<br>
}<br>
<br>
STRINGREF&nbsp;</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">BaseDomain::GetOrInternString(STRINGREF&nbsp;</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">pString)<br>
{<br>
&nbsp;&nbsp;&nbsp;&nbsp;CONTRACTL<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GC_TRIGGERS;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;THROWS;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MODE_COOPERATIVE;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PRECONDITION(CheckPointer(pString));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INJECT_FAULT(COMPlusThrowOM(););<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;CONTRACTL_END;<br>
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(m_pStringLiteralMap&nbsp;</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">&nbsp;NULL)<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LazyInitStringLiteralMap();<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;_ASSERTE(m_pStringLiteralMap);<br>
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;m_pStringLiteralMap</span><span style="color: rgb(0, 0, 0);">-&gt;</span><span style="color: rgb(0, 0, 0);">GetInternedString(pString,&nbsp;TRUE,&nbsp;</span><span style="color: rgb(0, 0, 0);">!</span><span style="color: rgb(0, 0, 0);">CanUnload()&nbsp;</span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);">&nbsp;bAppDOmainWontUnload&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);">);<br>
}<br>
</span></span></div>
<p>&nbsp; </p>
<p style="text-indent: 21pt;">sscli20\clr\src\vm\stringliteralmap.cpp</p>
<div class="cnblogs_code"><img style="display: none;" id="Code_Closed_Image_210437" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_210437').style.display='none'; document.getElementById('Code_Open_Image_210437').style.display='inline'; document.getElementById('Code_Open_Text_210437').style.display='inline';" src="contractedblock.gif" align="top" height="16" width="11"><img id="Code_Open_Image_210437" style="display: inline;" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_210437').style.display='none'; getElementById('Code_Closed_Image_210437').style.display='inline'; getElementById('Code_Closed_Text_210437').style.display='inline';" src="expandedblockstart.gif" align="top" height="16" width="11"><span style="display: none;" class="cnblogs_code_Collapse" id="Code_Closed_Text_210437">Code</span><span id="Code_Open_Text_210437" style="display: inline;"><br>
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: rgb(0, 0, 0);">STRINGREF&nbsp;</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">AppDomainStringLiteralMap::GetInternedString(STRINGREF&nbsp;</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">pString,&nbsp;BOOL&nbsp;bAddIfNotFound,&nbsp;BOOL&nbsp;bAppDomainWontUnload)<br>
{<br>
&nbsp;&nbsp;&nbsp;&nbsp;CONTRACTL<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GC_TRIGGERS;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;THROWS;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MODE_COOPERATIVE;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PRECONDITION(CheckPointer(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PRECONDITION(CheckPointer(pString));<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;CONTRACTL_END;<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;HashDatum&nbsp;Data;<br>
&nbsp;&nbsp;&nbsp;&nbsp;EEStringData&nbsp;StringData&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;EEStringData((</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">pString)</span><span style="color: rgb(0, 0, 0);">-&gt;</span><span style="color: rgb(0, 0, 0);">GetStringLength(),&nbsp;(</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">pString)</span><span style="color: rgb(0, 0, 0);">-&gt;</span><span style="color: rgb(0, 0, 0);">GetBuffer());<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwHash&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;m_StringToEntryHashTable</span><span style="color: rgb(0, 0, 0);">-&gt;</span><span style="color: rgb(0, 0, 0);">GetHash(</span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">StringData);<br>
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(m_StringToEntryHashTable</span><span style="color: rgb(0, 0, 0);">-&gt;</span><span style="color: rgb(0, 0, 0);">GetValue(</span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">StringData,&nbsp;</span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">Data,&nbsp;dwHash))<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STRINGREF&nbsp;</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">pStrObj&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;NULL;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pStrObj&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;((StringLiteralEntry</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">)Data)</span><span style="color: rgb(0, 0, 0);">-&gt;</span><span style="color: rgb(0, 0, 0);">GetStringObject();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_ASSERTE(</span><span style="color: rgb(0, 0, 0);">!</span><span style="color: rgb(0, 0, 0);">bAddIfNotFound&nbsp;</span><span style="color: rgb(0, 0, 0);">||</span><span style="color: rgb(0, 0, 0);">&nbsp;pStrObj);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;pStrObj;<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"><br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CrstPreempHolder&nbsp;gch(</span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">(SystemDomain::GetGlobalStringLiteralMap()</span><span style="color: rgb(0, 0, 0);">-&gt;</span><span style="color: rgb(0, 0, 0);">m_HashTableCrstGlobal));<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringLiteralEntryHolder&nbsp;pEntry(SystemDomain::GetGlobalStringLiteralMap()</span><span style="color: rgb(0, 0, 0);">-&gt;</span><span style="color: rgb(0, 0, 0);">GetInternedString(pString,&nbsp;dwHash,&nbsp;bAddIfNotFound));<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_ASSERTE(pEntry&nbsp;</span><span style="color: rgb(0, 0, 0);">||</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">!</span><span style="color: rgb(0, 0, 0);">bAddIfNotFound);<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;If&nbsp;pEntry&nbsp;is&nbsp;non-null&nbsp;then&nbsp;the&nbsp;entry&nbsp;exists&nbsp;in&nbsp;the&nbsp;Global&nbsp;map.&nbsp;(either&nbsp;we&nbsp;retrieved&nbsp;it&nbsp;or&nbsp;added&nbsp;it&nbsp;just&nbsp;now)</span><span style="color: rgb(0, 128, 0);"><br>
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(pEntry)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(</span><span style="color: rgb(0, 0, 0);">!</span><span style="color: rgb(0, 0, 0);">bAppDomainWontUnload)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;Since&nbsp;GlobalStringLiteralMap::GetInternedString()&nbsp;could&nbsp;have&nbsp;caused&nbsp;a&nbsp;GC,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;we&nbsp;need&nbsp;to&nbsp;recreate&nbsp;the&nbsp;string&nbsp;data.</span><span style="color: rgb(0, 128, 0);"><br>
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringData&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;EEStringData((</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">pString)</span><span style="color: rgb(0, 0, 0);">-&gt;</span><span style="color: rgb(0, 0, 0);">GetStringLength(),&nbsp;(</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">pString)</span><span style="color: rgb(0, 0, 0);">-&gt;</span><span style="color: rgb(0, 0, 0);">GetBuffer());<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;Make&nbsp;sure&nbsp;some&nbsp;other&nbsp;thread&nbsp;has&nbsp;not&nbsp;already&nbsp;added&nbsp;it.</span><span style="color: rgb(0, 128, 0);"><br>
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(</span><span style="color: rgb(0, 0, 0);">!</span><span style="color: rgb(0, 0, 0);">m_StringToEntryHashTable</span><span style="color: rgb(0, 0, 0);">-&gt;</span><span style="color: rgb(0, 0, 0);">GetValue(</span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">StringData,&nbsp;</span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">Data))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;Insert&nbsp;the&nbsp;handle&nbsp;to&nbsp;the&nbsp;string&nbsp;into&nbsp;the&nbsp;hash&nbsp;table.</span><span style="color: rgb(0, 128, 0);"><br>
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_StringToEntryHashTable</span><span style="color: rgb(0, 0, 0);">-&gt;</span><span style="color: rgb(0, 0, 0);">InsertValue(</span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">StringData,&nbsp;(LPVOID)pEntry,&nbsp;FALSE);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pEntry.Release();&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;while&nbsp;we're&nbsp;under&nbsp;lock</span><span style="color: rgb(0, 128, 0);"><br>
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pEntry.SuppressRelease();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;Retrieve&nbsp;the&nbsp;string&nbsp;objectref&nbsp;from&nbsp;the&nbsp;string&nbsp;literal&nbsp;entry.</span><span style="color: rgb(0, 128, 0);"><br>
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STRINGREF&nbsp;</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">pStrObj&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;NULL;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pStrObj&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;pEntry</span><span style="color: rgb(0, 0, 0);">-&gt;</span><span style="color: rgb(0, 0, 0);">GetStringObject();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;pStrObj;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;If&nbsp;the&nbsp;bAddIfNotFound&nbsp;flag&nbsp;is&nbsp;set&nbsp;then&nbsp;we&nbsp;better&nbsp;have&nbsp;a&nbsp;string<br>
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;string&nbsp;object&nbsp;at&nbsp;this&nbsp;point.</span><span style="color: rgb(0, 128, 0);"><br>
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;_ASSERTE(</span><span style="color: rgb(0, 0, 0);">!</span><span style="color: rgb(0, 0, 0);">bAddIfNotFound);<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;NULL;<br>
}<br>
</span></span></div>
<p>&nbsp; </p>
<p style="text-indent: 21pt;">sscli20\clr\src\vm<span style="font-family: 宋体;">目录中包含了</span> CLI <span style="font-family: 宋体;">核心实现，包括垃圾收集器、类装入器、类型系统、错误报告系统、应用程序域、配件、代理支持、反射、安全性和代码管理器。</span></p>
<p style="text-indent: 21pt;">&nbsp;</p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">当以下所有的条件都满足时，可以考虑使用享元模式：</span></p>
<p style="margin-left: 42pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l&nbsp;</span><span style="font-family: 宋体;">一个系统有大量的对象。</span> </p>
<p style="margin-left: 42pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l&nbsp;</span><span style="font-family: 宋体;">这些对象耗费大量的内存。</span> </p>
<p style="margin-left: 42pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l&nbsp;</span><span style="font-family: 宋体;">这些对象的状态中的大部分都可以外部化。</span> </p>
<p style="margin-left: 42pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l&nbsp;</span><span style="font-family: 宋体;">这些对象可以按照内蕴状态分成很多的组，当把外蕴对象从对象中剔除时，每一个组都可以仅用一个对象代替。</span> </p>
<p style="margin-left: 42pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l&nbsp;</span><span style="font-family: 宋体;">软件系统不依赖于这些对象的身份，换言之，这些对象可以是不可分辨的。</span></p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">使用享元模式需要维护一个记录了系统已有的所有享元的表，而这需要耗费资源。因此，应当在有足够多的享元实例可供共享时才值得使用享元模式。</span></p>

<div id="EntryTag">Tag标签: <a href="http://www.cnblogs.com/guushuuse/tag/Pattern/">Pattern</a></div>
<div id="digg_block">
<div id="div_digg">										
	<div class="diggit" onclick="DiggIt(1488422,37209,1)"> 
		<span class="diggnum" id="digg_count_1488422">0</span>
	</div>
	<div class="buryit" onclick="DiggIt(1488422,37209,2)"> 
		<span class="burynum" id="bury_count_1488422">0</span>
	</div>
	<div class="clear"></div>
	<span style="display: none;" id="span_isdigged_1488422">0</span>	
	<div class="diggword" id="digg_word_1488422">(请您对文章做出评价)</div>	
</div>
</div>
<div class="clear"></div>
<div id="post_next_prev">
<a href="http://www.cnblogs.com/guushuuse/archive/2009/05/17/1458928.html">« </a> 上一篇：<a href="http://www.cnblogs.com/guushuuse/archive/2009/05/17/1458928.html" title="发布于2009-05-17 19:45">DotNet Framework源代码中的模式（八）——Builder（生成器模式）</a><br>

</div>








		<p class="postfoot">
			posted on 2009-05-24 21:07 <a href="http://www.cnblogs.com/guushuuse/">guushuuse</a> 阅读(1299) <a href="#commentform">评论(0)</a> &nbsp;<a href="http://www.cnblogs.com/guushuuse/admin/EditPosts.aspx?postid=1488422">编辑</a> <a href="http://www.cnblogs.com/guushuuse/AddToFavorite.aspx?id=1488422">收藏</a> <a href="#" onclick="PutInWz();return false;">网摘</a>  所属分类: <a href="http://www.cnblogs.com/guushuuse/category/189705.html">53DotNet Framework源代码中的模式</a>
		</p>
	</div>
	<img src="1488422.html" height="1" width="1">
	
<!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<rdf:Description
rdf:about="http://www.cnblogs.com/guushuuse/archive/2009/05/24/1488422.html"
dc:identifier="http://www.cnblogs.com/guushuuse/archive/2009/05/24/1488422.html"
dc:title=""
trackback:ping="http://www.cnblogs.com/guushuuse/services/trackbacks/1488422.aspx" />
</rdf:RDF>
-->

	

<div id="ctl05_comment_form" class="commentform">




<div id="ctl05_divLoginPannel">
<div class="login_tips">注册用户登录后才能发表评论，请 <a href="http://passport.cnblogs.com/login.aspx?ReturnUrl=http%3a%2f%2fwww.cnblogs.com%2fguushuuse%2farchive%2f2009%2f05%2f24%2f1488422.html%3flogin%3d1%23commentform" class="underline">登录</a> 或 <a href="http://passport.cnblogs.com/register.aspx?ReturnUrl=http%3a%2f%2fwww.cnblogs.com%2fguushuuse%2farchive%2f2009%2f05%2f24%2f1488422.html%23Bottom2" class="underline">注册</a> 。</div>
</div>

<div class="itnews c_ad_block" id="itnews">
<a href="http://news.cnblogs.com/" target="_top">IT新闻</a>:<br>

          ·  <a href="http://news.cnblogs.com/n/55140/" target="_top">《星际争霸2》"刀锋女王"重金属主题音乐视频</a><br>
	
          ·  <a href="http://news.cnblogs.com/n/55139/" target="_top">中国站长最郁闷的几件事情</a><br>
	
          ·  <a href="http://news.cnblogs.com/n/55138/" target="_top">苹果Vs谷歌：手机领域谁怕谁？</a><br>
	
          ·  <a href="http://news.cnblogs.com/n/55137/" target="_top">摩托罗拉：豪赌Android的希望与隐忧</a><br>
	
          ·  <a href="http://news.cnblogs.com/n/55136/" target="_top">分众新坐标：楼宇是过去 未来在手机和互联网</a><br>
	
</div>


<div id="ad_under_comment" class="c_ad_block">
<a href="http://a4.yeshj.com/rd/34138/" target="_top">每天10分钟，轻松学英语</a><br><br>
<div id="google_ads_div_cnblogs_blogpost_bottom1">
<iframe src="index_1.html" style="border: 0pt none ;" marginheight="0" marginwidth="0" name="google_ads_iframe_cnblogs_blogpost_bottom1" id="google_ads_iframe_cnblogs_blogpost_bottom1" scrolling="no" frameborder="0" height="60" width="468"></iframe></div>

<br>
<div id="google_ads_div_cnblogs_blogpost_bottom">
<iframe src="index_2.html" style="border: 0pt none ;" marginheight="0" marginwidth="0" name="google_ads_iframe_cnblogs_blogpost_bottom" id="google_ads_iframe_cnblogs_blogpost_bottom" scrolling="no" frameborder="0" height="250" width="300"></iframe></div>

</div>
<div id="site_nav_under" class="c_ad_block">
网站导航：<br>
<a href="http://www.cnblogs.com/" target="_top">博客园首页</a> &nbsp;<a href="http://news.cnblogs.com/" target="_top">IT新闻</a> &nbsp;<a href="http://home.cnblogs.com/" target="_top">个人主页</a> &nbsp;<a href="http://home.cnblogs.com/ing/" target="_top">闪存</a> &nbsp;<a href="http://job.cnblogs.com/" target="_top">程序员招聘</a> &nbsp;<a href="http://space.cnblogs.com/" target="_top">社区</a> &nbsp;<a href="http://space.cnblogs.com/q/" target="_top">博问</a> &nbsp;<a href="http://wz.cnblogs.com/" target="_top">网摘</a>
</div>
<div id="ad_under_comment2" class="c_ad_block">
<a href="http://www.china-pub.com/STATIC07/0912/zh_ndcx_091212.asp" target="_top"><img src="chinapub_20091222.jpg" alt="" style="border: 0px none ;"></a><br>
<a href="http://www.china-pub.com/itbook/" target="_top">China-pub 计算机图书网上专卖店！6.5万品种2-8折！</a><br>
<a href="http://www.china-pub.com/static07/0901/zh_jueba_090121.asp" target="_top">China-Pub 计算机绝版图书按需印刷服务</a><br>
</div>

<div id="relative_search"><br><b>相关搜索:</b><br> <a href="http://zzk.cnblogs.com/s?w=Pattern" target="_top">Pattern</a> <a href="http://zzk.cnblogs.com/s?w=53DotNet+Framework%e6%ba%90%e4%bb%a3%e7%a0%81%e4%b8%ad%e7%9a%84%e6%a8%a1%e5%bc%8f" target="_top">53DotNet Framework源代码中的模式</a> </div><div id="relative_search"><br><b>在知识库中查看：</b><br> <a href="http://kb.cnblogs.com/a/1488422/">DotNet Framework源代码中的模式（九）——Flyweight（享元模式）</a></div>

</div>


				
			</div>
			<div id="rightmenu">
				
					
<h3>导航</h3>
<ul>
			<li><a id="MyLinks1_HomeLink" href="http://www.cnblogs.com/">博客园</a></li>
			<li><a id="MyLinks1_MyHomeLink" href="http://www.cnblogs.com/guushuuse/">首页</a></li>
			<li><a id="MyLinks1_NewPostLink" href="http://www.cnblogs.com/guushuuse/admin/EditPosts.aspx?opt=1">新随笔</a></li>
			<li><a id="MyLinks1_ContactLink" accesskey="9" href="http://space.cnblogs.com/msg/send/guushuuse">联系</a></li>
			<li><a id="MyLinks1_Syndication" href="http://www.cnblogs.com/guushuuse/rss">订阅</a><a id="MyLinks1_XMLLink" href="http://www.cnblogs.com/guushuuse/rss"><img src="xml.gif" alt="订阅" style="border-width: 0px;"></a>
			</li><li><a id="MyLinks1_Admin" href="http://www.cnblogs.com/guushuuse/admin/EditPosts.aspx">管理</a></li>
</ul>
					
<h3>统计</h3>
	<ul>
		<li>随笔 - 85
		</li><li>文章 - 0
		</li><li>评论 - 188
		</li><li>引用 - 18
	</li>
</ul>
					
<div class="newsItem">
<h3>公告</h3>
<div style="overflow: scroll; width: 200px; height: 200px;"><a id="map-5adbb343-f959-4928-ac8e-7fd8f9433b2b" title="单击可在 Live.com 上查看此地图" href="http://maps.live.com/default.aspx?v=2&amp;cp=31.55747%7E120.358&amp;lvl=10&amp;style=r&amp;mkt=en-us&amp;FORM=LLWR" alt="单击可在 Live.com 上查看此地图" target="_top"><img alt="无锡地图" src="wuix_map_1.jpg" border="0" height="374" width="363"></a></div><div id="profile_block"><a href="http://home.cnblogs.com/guushuuse/" target="_top">我的主页</a>&nbsp; <a href="http://home.cnblogs.com/guushuuse/detail/" target="_top">个人资料</a><br><a href="http://home.cnblogs.com/guushuuse/ing/" target="_top">我的闪存</a>&nbsp; <a href="http://space.cnblogs.com/msg/send/guushuuse" target="_top">发短消息</a></div>
</div>

					

<div class="mySearch">
<h3 class="catListTitle">搜索</h3>
<div class="div_my_zzk"><input value="" id="q" onkeydown="return zzk_go_enter(event);" class="input_my_zzk" type="text">&nbsp;<input onclick="zzk_go()" value="找找看" id="btnZzk" class="btn_my_zzk" type="button"></div>
</div>
<h3>常用链接</h3>
<ul>

		<li><a id="SingleColumn1_ctl02_rptMainLinks_ctl00_lnkLinkItem" href="http://www.cnblogs.com/guushuuse/MyPosts.html">我的随笔</a></li>
	
		<li><a id="SingleColumn1_ctl02_rptMainLinks_ctl01_lnkLinkItem" href="http://home.cnblogs.com/guushuuse/">我的空间</a></li>
	
		<li><a id="SingleColumn1_ctl02_rptMainLinks_ctl02_lnkLinkItem" href="http://space.cnblogs.com/msg/recent">我的短信</a></li>
	
		<li><a id="SingleColumn1_ctl02_rptMainLinks_ctl03_lnkLinkItem" href="http://www.cnblogs.com/guushuuse/MyComments.html">我的评论</a></li>
	
<li><a id="itemListLink" onclick="this.blur();WarpClass('itemListLink', 'itemListLin_con');return false;" href="#">更多链接</a></li>
</ul>
<div id="itemListLin_con" style="display: none;">
<ul>
		<li><a id="SingleColumn1_ctl02_repeaterLinks_ctl01_lnkLinkItem" title="我发表过评论的随笔" href="http://www.cnblogs.com/guushuuse/OtherPosts.html">我的参与</a></li>
	
		<li><a id="SingleColumn1_ctl02_repeaterLinks_ctl02_lnkLinkItem" href="http://www.cnblogs.com/guushuuse/MyNews.html">我的新闻</a></li>
	
		<li><a id="SingleColumn1_ctl02_repeaterLinks_ctl03_lnkLinkItem" href="http://www.cnblogs.com/guushuuse/RecentComments.html">最新评论</a></li>
	
		<li><a id="SingleColumn1_ctl02_repeaterLinks_ctl04_lnkLinkItem" href="http://www.cnblogs.com/guushuuse/tag/">我的标签</a></li>
	</ul>
</div>

<h3 class="catListTitle">我的标签</h3>
<div id="MyTag">
<ul>
<li><a href="http://www.cnblogs.com/guushuuse/tag/ASP.NET/">ASP.NET</a>(28)</li><li><a href="http://www.cnblogs.com/guushuuse/tag/NHibernate/">NHibernate</a>(26)</li><li><a href="http://www.cnblogs.com/guushuuse/tag/Spring.NET/">Spring.NET</a>(26)</li><li><a href="http://www.cnblogs.com/guushuuse/tag/ASP.NET+AJAX/">ASP.NET AJAX</a>(26)</li><li><a href="http://www.cnblogs.com/guushuuse/tag/SSO/">SSO</a>(13)</li><li><a href="http://www.cnblogs.com/guushuuse/tag/Pattern/">Pattern</a>(10)</li>
</ul>
</div>
		<h3>随笔分类</h3>
		
				<ul>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl01_Link" href="http://www.cnblogs.com/guushuuse/category/135488.html">01术语(29)</a> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl01_RssLink" title="Subscribe to 01术语(29)" href="http://www.cnblogs.com/guushuuse/category/135488.html/rss">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl02_Link" href="http://www.cnblogs.com/guushuuse/category/188547.html">02知识点(2)</a> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl02_RssLink" title="Subscribe to 02知识点(2)" href="http://www.cnblogs.com/guushuuse/category/188547.html/rss">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl03_Link" href="http://www.cnblogs.com/guushuuse/category/136779.html">03FAQ(3)</a> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl03_RssLink" title="Subscribe to 03FAQ(3)" href="http://www.cnblogs.com/guushuuse/category/136779.html/rss">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl04_Link" href="http://www.cnblogs.com/guushuuse/category/188680.html">11.NET Framework</a> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl04_RssLink" title="Subscribe to 11.NET Framework" href="http://www.cnblogs.com/guushuuse/category/188680.html/rss">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl05_Link" href="http://www.cnblogs.com/guushuuse/category/188681.html">12C#</a> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl05_RssLink" title="Subscribe to 12C#" href="http://www.cnblogs.com/guushuuse/category/188681.html/rss">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl06_Link" href="http://www.cnblogs.com/guushuuse/category/188561.html">13ASP.NET(2)</a> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl06_RssLink" title="Subscribe to 13ASP.NET(2)" href="http://www.cnblogs.com/guushuuse/category/188561.html/rss">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl07_Link" href="http://www.cnblogs.com/guushuuse/category/223074.html">51技术文章</a> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl07_RssLink" title="Subscribe to 51技术文章" href="http://www.cnblogs.com/guushuuse/category/223074.html/rss">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl08_Link" href="http://www.cnblogs.com/guushuuse/category/135487.html">52ASP.NET&amp;Spring.NET&amp;NHibernate最佳实践(26)</a> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl08_RssLink" title="Subscribe to 52ASP.NET&amp;Spring.NET&amp;NHibernate最佳实践(26)" href="http://www.cnblogs.com/guushuuse/category/135487.html/rss">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl09_Link" href="http://www.cnblogs.com/guushuuse/category/189705.html">53DotNet Framework源代码中的模式(9)</a> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl09_RssLink" title="Subscribe to 53DotNet Framework源代码中的模式(9)" href="http://www.cnblogs.com/guushuuse/category/189705.html/rss">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl10_Link" href="http://www.cnblogs.com/guushuuse/category/223085.html">54.轻量级单点登录系统最佳实践_V2</a> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl10_RssLink" title="Subscribe to 54.轻量级单点登录系统最佳实践_V2" href="http://www.cnblogs.com/guushuuse/category/223085.html/rss">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl11_Link" href="http://www.cnblogs.com/guushuuse/category/187644.html">54轻量级单点登录系统最佳实践(13)</a> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl11_RssLink" title="Subscribe to 54轻量级单点登录系统最佳实践(13)" href="http://www.cnblogs.com/guushuuse/category/187644.html/rss">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl12_Link" href="http://www.cnblogs.com/guushuuse/category/223083.html">55Visual Studio International Pack应用</a> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl12_RssLink" title="Subscribe to 55Visual Studio International Pack应用" href="http://www.cnblogs.com/guushuuse/category/223083.html/rss">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl13_Link" href="http://www.cnblogs.com/guushuuse/category/223084.html">56Chart Controls for .NET Framework应用</a> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl13_RssLink" title="Subscribe to 56Chart Controls for .NET Framework应用" href="http://www.cnblogs.com/guushuuse/category/223084.html/rss">(rss)</a></li>
			
				</ul>
			
	
		<h3>随笔档案</h3>
		
				<ul>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl01_Link" href="http://www.cnblogs.com/guushuuse/archive/2009/05.html">2009年5月 (31)</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl02_Link" href="http://www.cnblogs.com/guushuuse/archive/2009/04.html">2009年4月 (13)</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl03_Link" href="http://www.cnblogs.com/guushuuse/archive/2008/05.html">2008年5月 (41)</a> </li>
			
				</ul>
			
	
		<h3>收藏夹</h3>
		
				<ul>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl02_LinkList_ctl01_Link" href="http://www.cnblogs.com/guushuuse/favorite/224492.html">01.Net(3)</a> <a id="SingleColumn1_Categories_CatList_ctl02_LinkList_ctl01_RssLink" title="Subscribe to 01.Net(3)" href="http://www.cnblogs.com/guushuuse/favorite/224492.html/rss">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl02_LinkList_ctl02_Link" href="http://www.cnblogs.com/guushuuse/favorite/223092.html">09Tools(2)</a> <a id="SingleColumn1_Categories_CatList_ctl02_LinkList_ctl02_RssLink" title="Subscribe to 09Tools(2)" href="http://www.cnblogs.com/guushuuse/favorite/223092.html/rss">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl02_LinkList_ctl03_Link" href="http://www.cnblogs.com/guushuuse/favorite/224471.html">51项目</a> <a id="SingleColumn1_Categories_CatList_ctl02_LinkList_ctl03_RssLink" title="Subscribe to 51项目" href="http://www.cnblogs.com/guushuuse/favorite/224471.html/rss">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl02_LinkList_ctl04_Link" href="http://www.cnblogs.com/guushuuse/favorite/224472.html">52项目-Network(3)</a> <a id="SingleColumn1_Categories_CatList_ctl02_LinkList_ctl04_RssLink" title="Subscribe to 52项目-Network(3)" href="http://www.cnblogs.com/guushuuse/favorite/224472.html/rss">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl02_LinkList_ctl05_Link" href="http://www.cnblogs.com/guushuuse/favorite/224473.html">53项目-CMS</a> <a id="SingleColumn1_Categories_CatList_ctl02_LinkList_ctl05_RssLink" title="Subscribe to 53项目-CMS" href="http://www.cnblogs.com/guushuuse/favorite/224473.html/rss">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl02_LinkList_ctl06_Link" href="http://www.cnblogs.com/guushuuse/favorite/224474.html">54项目-Edit(20)</a> <a id="SingleColumn1_Categories_CatList_ctl02_LinkList_ctl06_RssLink" title="Subscribe to 54项目-Edit(20)" href="http://www.cnblogs.com/guushuuse/favorite/224474.html/rss">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl02_LinkList_ctl07_Link" href="http://www.cnblogs.com/guushuuse/favorite/224494.html">55项目-SSO(2)</a> <a id="SingleColumn1_Categories_CatList_ctl02_LinkList_ctl07_RssLink" title="Subscribe to 55项目-SSO(2)" href="http://www.cnblogs.com/guushuuse/favorite/224494.html/rss">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl02_LinkList_ctl08_Link" href="http://www.cnblogs.com/guushuuse/favorite/224532.html">56项目-MIS(5)</a> <a id="SingleColumn1_Categories_CatList_ctl02_LinkList_ctl08_RssLink" title="Subscribe to 56项目-MIS(5)" href="http://www.cnblogs.com/guushuuse/favorite/224532.html/rss">(rss)</a></li>
			
				</ul>
			
	
		<h3>01技术网站</h3>
		
				<ul>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl01_Link" href="http://www.ibm.com/developerworks/cn/" target="_top">developerWorks 中国</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl02_Link" href="http://www.infoq.com/" target="_top">InfoQ</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl03_Link" href="http://sourceforge.net/" target="_top">SourceForge.net</a> </li>
			
				</ul>
			
	
		<h3>07技术网站</h3>
		
				<ul>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl04_LinkList_ctl01_Link" href="http://www.connectionstrings.com/" target="_top">ConnectionStrings</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl04_LinkList_ctl02_Link" href="http://www.regxlib.net/" target="_top">RegExLib</a> </li>
			
				</ul>
			
	
		<h3>11.NET</h3>
		
				<ul>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl01_Link" href="http://www.dotnet247.com/" target="_top">.NET 247</a> <a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl01_RssLink" title="Subscribe to .NET 247" href="http://www.dotnet247.com/247reference/rss.aspx?t=site">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl02_Link" href="http://www.123aspx.com/">123aspx</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl03_Link" href="http://4guysfromrolla.com/" target="_top">4GuysFromRolla.com</a> <a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl03_RssLink" title="Subscribe to 4GuysFromRolla.com" href="http://aspnet.4guysfromrolla.com/rss/rss.aspx">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl04_Link" href="http://aspalliance.com/" target="_top">ASP Alliance</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl05_Link" href="http://www.asp.net/" target="_top">ASP.NET</a> <a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl05_RssLink" title="Subscribe to ASP.NET" href="http://www.asp.net/community/articles/rss.ashx">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl06_Link" href="http://www.c-sharpcorner.com/" target="_top">C# Corner </a> <a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl06_RssLink" title="Subscribe to C# Corner " href="http://www.c-sharpcorner.com/Rss/LatestArticles.aspx">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl07_Link" href="http://www.csharphelp.com/" target="_top">C# Help</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl08_Link" href="http://channel9.msdn.com/" target="_top">Channel 9</a> <a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl08_RssLink" title="Subscribe to Channel 9" href="http://channel9.msdn.com/Feeds/RSS/">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl09_Link" href="http://www.codeguru.com/" target="_top">CodeGuru</a> <a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl09_RssLink" title="Subscribe to CodeGuru" href="http://www.codeguru.com/icom_includes/feeds/codeguru/rss-all.xml">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl10_Link" href="http://www.codeplex.com/" target="_top">CodePlex</a> <a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl10_RssLink" title="Subscribe to CodePlex" href="http://www.codeplex.com/rss.ashx">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl11_Link" href="http://www.codeproject.com/" target="_top">CodeProject</a> <a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl11_RssLink" title="Subscribe to CodeProject" href="http://www.codeproject.com/webservices/articlerss.aspx">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl12_Link" href="http://www.devsource.com/" target="_top">DevSource</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl13_Link" href="http://www.devx.com/" target="_top">DevX</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl14_Link" href="http://www.dotnetbips.com/" target="_top">DotNetBips</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl15_Link" href="http://www.eggheadcafe.com/" target="_top">EggHeadCafe</a> <a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl15_RssLink" title="Subscribe to EggHeadCafe" href="http://www.eggheadcafe.com/rss_pheedo.xml">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl16_Link" href="http://code.msdn.microsoft.com/" target="_top">MSDN Code Gallery</a> <a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl16_RssLink" title="Subscribe to MSDN Code Gallery" href="http://code.msdn.microsoft.com/rss.ashx">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl17_Link" href="http://msdn.microsoft.com/en-us/magazine/default.aspx" target="_top">MSDN Magazine</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl18_Link" href="http://windowsclient.net/" target="_top">WindowsClient.net</a> <a id="SingleColumn1_Categories_CatList_ctl05_LinkList_ctl18_RssLink" title="Subscribe to WindowsClient.net" href="http://windowsclient.net/blogs/MainFeed.aspx?GroupID=5&amp;Type=AllBlogs">(rss)</a></li>
			
				</ul>
			
	
		<h3>15.NET开源</h3>
		
				<ul>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl06_LinkList_ctl01_Link" href="http://www.codeplex.com/AtlasControlToolkit/" target="_top">AJAX Control Toolkit</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl06_LinkList_ctl02_Link" href="http://aspnet.codeplex.com/Wiki/View.aspx?title=Image%20Generation&amp;referringTitle=Home" target="_top">ASP.NET Generated Image</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl06_LinkList_ctl03_Link" href="http://aspnet.codeplex.com/Wiki/View.aspx?title=MVC" target="_top">ASP.NET MVC</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl06_LinkList_ctl04_Link" href="http://netcommon.sourceforge.net/" target="_top">Common.Logging</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl06_LinkList_ctl05_Link" href="http://sourceforge.net/projects/dockpanelsuite/" target="_top">DockPanel Suite</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl06_LinkList_ctl06_Link" href="http://dotnetzip.codeplex.com/" target="_top">DotNetZip Library </a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl06_LinkList_ctl07_Link" href="http://www.filehelpers.com/" target="_top">FileHelpers</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl06_LinkList_ctl08_Link" href="http://www.codeplex.com/htmlagilitypack" target="_top">Html Agility Pack</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl06_LinkList_ctl09_Link" href="http://itextsharp.sourceforge.net/" target="_top">iTextSharp</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl06_LinkList_ctl10_Link" href="http://logging.apache.org/log4net/" target="_top">log4net</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl06_LinkList_ctl11_Link" href="http://incubator.apache.org/lucene.net/" target="_top">Lucene.Net </a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl06_LinkList_ctl12_Link" href="http://www.nhibernate.org/" target="_top">NHibernate</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl06_LinkList_ctl13_Link" href="http://quartznet.sourceforge.net/" target="_top">Quartz.NET</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl06_LinkList_ctl14_Link" href="http://www.codeplex.com/SharpMap/" target="_top">SharpMap</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl06_LinkList_ctl15_Link" href="http://www.icsharpcode.net/OpenSource/SharpZipLib/" target="_top">SharpZipLib</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl06_LinkList_ctl16_Link" href="http://www.springframework.net/" target="_top">Spring.NET</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl06_LinkList_ctl17_Link" href="http://www.stringtemplate.org/" target="_top">StringTemplate</a> </li>
			
				</ul>
			
	
		<h3>16.NET开源</h3>
		
				<ul>
			
				</ul>
			
	
		<h3>18.NET博客</h3>
		
				<ul>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl08_LinkList_ctl01_Link" href="http://weblogs.asp.net/scottgu/" target="_top">ScottGu's Blog</a> <a id="SingleColumn1_Categories_CatList_ctl08_LinkList_ctl01_RssLink" title="Subscribe to ScottGu's Blog" href="http://weblogs.asp.net/scottgu/rss.aspx">(rss)</a></li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl08_LinkList_ctl02_Link" href="http://blog.joycode.com/" target="_top">博客堂</a> </li>
			
				</ul>
			
	
		<h3>81其他</h3>
		
				<ul>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl09_LinkList_ctl01_Link" href="http://www.chinaunix.net/" target="_top">ChinaUnix.net</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl09_LinkList_ctl02_Link" href="http://www.csdn.net/" target="_top">CSDN</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl09_LinkList_ctl03_Link" href="http://www.db2china.net/" target="_top">IBM DB2数据库专业网站 </a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl09_LinkList_ctl04_Link" href="http://www.itpub.net/" target="_top">ITPUB</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl09_LinkList_ctl05_Link" href="http://www.mydb2.cn/" target="_top">MYDB2.CN</a> </li>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl09_LinkList_ctl06_Link" href="http://www.eimhe.com/" target="_top">美河学习在线</a> </li>
			
				</ul>
			
	
		<h3>82其他</h3>
		
				<ul>
			
				</ul>
			
	
		<h3>99友情链接</h3>
		
				<ul>
			
				<li><a id="SingleColumn1_Categories_CatList_ctl11_LinkList_ctl01_Link" href="http://www.cnblogs.com/xugang">xugang</a> </li>
			
				</ul>
			
	

<h3>积分与排名</h3>
<ul>
	<li>
		积分 -
		72091
	</li><li>
		排名 -
		1017
	</li>
</ul>

<h3 class="catListTitle">最新评论
	<a id="SingleColumn1__2e3d8b6_RSSHyperlink1" href="http://www.cnblogs.com/guushuuse/CommentsRSS.aspx"><img src="xml.gif" style="border-width: 0px;"></a></h3>
<div class="RecentComment" id="RecentComments">
	
			<ul>
		
			<li style="">
				<a id="SingleColumn1__2e3d8b6_CommentList_ctl01_Hyperlink1" href="http://www.cnblogs.com/guushuuse/archive/2009/05/03/1448040.html#1716767">1.&nbsp;Re:C#设计模式手册_V1.0</a>
			</li>
			<li style="">
				非常不错！
			</li>
			<li style="text-align: right; margin-right: 4px;">
				--心情预约</li>
		
			<li style="">
				<a id="SingleColumn1__2e3d8b6_CommentList_ctl02_Hyperlink1" href="http://www.cnblogs.com/guushuuse/archive/2008/05/10/1190995.html#1662802">2.&nbsp;Re:ASP.NET&amp;Spring.NET&amp;NHibernate最佳实践(二)——第1章前言</a>
			</li>
			<li style="">
				23wewe
			</li>
			<li style="text-align: right; margin-right: 4px;">
				--fwf</li>
		
			<li style="">
				<a id="SingleColumn1__2e3d8b6_CommentList_ctl03_Hyperlink1" href="http://www.cnblogs.com/guushuuse/archive/2009/05/04/1449012.html#1645608">3.&nbsp;Re:轻量级单点登录系统最佳实践(四)——第3章 Web-SSO通常实现方式</a>
			</li>
			<li style="">
				沙发
			</li>
			<li style="text-align: right; margin-right: 4px;">
				--海洋之 心</li>
		
			<li style="">
				<a id="SingleColumn1__2e3d8b6_CommentList_ctl04_Hyperlink1" href="http://www.cnblogs.com/guushuuse/archive/2009/05/04/1449011.html#1645606">4.&nbsp;Re:轻量级单点登录系统最佳实践(三)——第2章 单点登录简介</a>
			</li>
			<li style="">
				沙发
			</li>
			<li style="text-align: right; margin-right: 4px;">
				--海洋之 心</li>
		
			<li style="">
				<a id="SingleColumn1__2e3d8b6_CommentList_ctl05_Hyperlink1" href="http://www.cnblogs.com/guushuuse/archive/2009/05/04/1449027.html#1645605">5.&nbsp;Re:轻量级单点登录系统最佳实践(七)——5.2. 单点登录系统SSOLab.SSOServer.WebApp</a>
			</li>
			<li style="">
				沙发
			</li>
			<li style="text-align: right; margin-right: 4px;">
				--海洋之 心</li>
		
			</ul>
		
</div>

<h3 class="catListTitle">阅读排行榜</h3>
<div class="RecentComment" id="TopViewPosts"> 
	
			<ul style="">
		
			<li>
				<a id="SingleColumn1_ctl07_TopList_ctl01_Hyperlink1" href="http://www.cnblogs.com/guushuuse/archive/2008/05/21/1201890.html">1.&nbsp;ASP.NET&amp;Spring.NET&amp;NHibernate最佳实践(八)——第4章权限子系统（1） (3788)</a>
			</li>
		
			<li>
				<a id="SingleColumn1_ctl07_TopList_ctl02_Hyperlink1" href="http://www.cnblogs.com/guushuuse/archive/2008/05/22/1203708.html">2.&nbsp;ASP.NET&amp;Spring.NET&amp;NHibernate最佳实践(二十六)——第4章权限子系统（19）权限子系统小结 (3355)</a>
			</li>
		
			<li>
				<a id="SingleColumn1_ctl07_TopList_ctl03_Hyperlink1" href="http://www.cnblogs.com/guushuuse/archive/2009/05/04/1449074.html">3.&nbsp;轻量级单点登录系统最佳实践(2805)</a>
			</li>
		
			<li>
				<a id="SingleColumn1_ctl07_TopList_ctl04_Hyperlink1" href="http://www.cnblogs.com/guushuuse/archive/2008/05/10/1191417.html">4.&nbsp;ASP.NET&amp;Spring.NET&amp;NHibernate最佳实践(四)——第3章人事子系统（1）(2788)</a>
			</li>
		
			<li>
				<a id="SingleColumn1_ctl07_TopList_ctl05_Hyperlink1" href="http://www.cnblogs.com/guushuuse/archive/2008/05/10/1191231.html">5.&nbsp;ASP.NET&amp;Spring.NET&amp;NHibernate最佳实践(三)——第2章环境准备(2757)</a>
			</li>
		
			</ul>
		
</div>

<h3 class="catListTitle">评论排行榜</h3>
<div class="RecentComment" id="TopCommentsPosts">
	
			<ul style="">
		
			<li>
				<a id="SingleColumn1_ctl08_TopList_ctl01_Hyperlink1" href="http://www.cnblogs.com/guushuuse/archive/2009/05/04/1449074.html">1.&nbsp;轻量级单点登录系统最佳实践(19)</a>
			</li>
		
			<li>
				<a id="SingleColumn1_ctl08_TopList_ctl02_Hyperlink1" href="http://www.cnblogs.com/guushuuse/archive/2008/05/20/1203278.html">2.&nbsp;Agile Software Development（敏捷软件开发）(17)</a>
			</li>
		
			<li>
				<a id="SingleColumn1_ctl08_TopList_ctl03_Hyperlink1" href="http://www.cnblogs.com/guushuuse/archive/2008/05/22/1203708.html">3.&nbsp;ASP.NET&amp;Spring.NET&amp;NHibernate最佳实践(二十六)——第4章权限子系统（19）权限子系统小结 (12)</a>
			</li>
		
			<li>
				<a id="SingleColumn1_ctl08_TopList_ctl04_Hyperlink1" href="http://www.cnblogs.com/guushuuse/archive/2008/05/10/1191231.html">4.&nbsp;ASP.NET&amp;Spring.NET&amp;NHibernate最佳实践(三)——第2章环境准备(12)</a>
			</li>
		
			<li>
				<a id="SingleColumn1_ctl08_TopList_ctl05_Hyperlink1" href="http://www.cnblogs.com/guushuuse/archive/2009/05/11/1454464.html">5.&nbsp;DotNet Framework源代码中的模式（四）——Abstract Factory（抽象工厂模式）(11)</a>
			</li>
		
			</ul>
		
</div>
				
			</div>			
			
<p id="footer">
	Powered by: 
	<br>
	
	<a id="Footer1_Hyperlink3" name="Hyperlink1" href="http://www.cnblogs.com/" style="font-family: Verdana; font-size: 12px;">博客园</a>
	<br>
	Copyright © guushuuse
</p>
	

    </form>
	
	
      
    
    
    
</body>
</html>
